﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IsikFx.Project.CommonTypes;
using IsikFx.Project.CommonTypes.Announcement;
using IsikFx.Project.CommonTypes.CRUD;
using IsikFx.Project.CommonTypes.Fund;
using IsikFx.Project.CommonTypes.FundLog;
using IsikFx.Project.CommonTypes.User;
using IsikFx.Project.CommonTypes.Watchman;

namespace IsikFx.Project.ClientApp.Helpers
{
    public interface IWcfDataProvider
    {
        Type ServiceType { get; }

        Boolean? WcfIsAlive();


        bool CheckFirstLogin(string domainName);


        CrudResponseMessage InsertNewFund(string domainName, string fundAmount, int fundDate, int fundMonth, int fundYear);


        FundResponseMessage GetNewFunds();


        CrudResponseMessage UpdateShownFunds(int id);


        CrudResponseMessage UpdateUserAccount(int id);


        int GetUserIDFromDomain(string domainName);


        CrudResponseMessage UpdateUserRole(int id, int salesOrRetaintion);


        CrudResponseMessage InsertNewUser(string name, string surname, int teamId, int role, string domainName);


        UserResponseMessage GetCurrentUser(string domainName);


        CrudResponseMessage CreateNewCustomer(int agentID, string customerName, string customerSurname,
                                    string loginNo, string accountOpenDate, string firstFundDate,
                                    string firstFundAmount, string currencyType);

        List<Customer> GetCustomers(int agentID);


        UserResponseMessage GetUsersByRole(int role);


        CrudResponseMessage UpdateFundShownStatus(int id);


        bool Test();


        CrudResponseMessage UpdateAgentGoal(int agentID, string fundGoal, string accountGoal, string currencyType, bool insert);


        Goal GetAgentGoal(int agentID);


        GoalProgress GetGoalProgress(int agentID);


        AnnouncementResponseMessage GetActiveAnnouncementsAsAdmin(int adminID);


        AnnouncementResponseMessage GetActiveAnnouncementsAsUser(int roleType);


        CrudResponseMessage InsertAnnouncement(int adminID, string announcementID, string announcementTitle, string announcement, string createDate, int roleType);


        CrudResponseMessage ResetGoals();


        CrudResponseMessage DeleteAnnouncement(int id);


        CrudResponseMessage UpdateWatchmenTable(List<Watchman> watchManList);


        WatchmanResponseMessage GetWatchmenList(string watchmanDate);


        CrudResponseMessage SaveUsersPhoto(string fileName, byte[] stream);


        FundLogResponseMessage GetMinusFundLogs(string userID, string date);


        FundLogResponseMessage GetPlusFundLogs(string userID, string date);


        FundLogResponseMessage GetAllFundLogs(string userID, string date);


        CrudResponseMessage InsertFundLog(string userID, string fundAmount, int isFundOut, string fundDate, string fundTime);
    }
}
